xargs یکی از ابزارهای قدرتمند لینوکس است که
ورودی استاندارد (STDIN) را به آرگومان (Argument)
برای یک فرمان تبدیل میکند.
بعضی از دستورات مثل rm، mkdir، cp و ...
نمیتوانند ورودی را از Pipe بگیرند. xargs این مشکل را حل میکند
و خروجی Pipe را به عنوان آرگومان خط فرمان به آن دستورات میدهد.
توضیح: خروجی command1 به عنوان ورودی xargs میرود و
xargs آن را به عنوان آرگومان به command2 میدهد.
| ویژگی | Pipe (|) |
xargs |
|---|---|---|
| نحوه ارسال | خروجی را به عنوان ورودی استاندارد (STDIN) میدهد | خروجی را به عنوان آرگومان خط فرمان میدهد |
| مناسب برای | دستوراتی که STDIN میخوانند (مثل grep, wc) |
دستوراتی که آرگومان میخوانند (مثل rm, mkdir) |
| مثال | ls | grep ".txt" |
ls | xargs rm |
توضیح: همه فایلهای .tmp را پیدا کرده و حذف میکند.
توضیح: همه فایلهای .txt را حذف میکند.
توضیح: سه دایرکتوری dir1، dir2 و dir3 را ایجاد میکند.
توضیح: تعداد خطوط همه فایلهای .txt را نشان میدهد.
| گزینه | توضیح | مثال |
|---|---|---|
-n N |
هر بار N آرگومان به دستور بده | ls | xargs -n 2 echo |
-p |
قبل از اجرا تأیید بگیر (Prompt) | ls | xargs -p rm |
-t |
دستور را قبل از اجرا چاپ کن (Trace) | ls | xargs -t rm |
-0 |
ورودی را با کاراکتر null جدا کن (برای نامهای با فاصله) | find . -name "*.txt" -print0 | xargs -0 rm |
-I REPLACE |
جایگزینی الگو در دستور | ls | xargs -I {} mv {} {}.bak |
-P N |
اجرای همزمان با N پردازه (Parallel) | ls | xargs -P 4 -n 1 wc |
--max-args |
همان -n |
ls | xargs --max-args=3 echo |
--replace |
همان -I |
ls | xargs --replace={} mv {} {}.old |
توضیح: هر بار ۲ عدد را به echo میدهد.
توضیح: همه فایلهای .txt را به .txt.bak تغییر نام میدهد.
{} به جای نام فایل قرار میگیرد.
توضیح: -I FILE یعنی هر جایی که FILE باشد، با نام فایل جایگزین میشود.
توضیح: قبل از حذف، از شما تأیید میگیرد.
توضیح: اگر نام فایلها شامل فاصله باشد، این روش آنها را بهدرستی پردازش میکند.
توضیح: ۴ تا wc را به صورت همزمان اجرا میکند (هر کدام روی یک فایل).
توضیح: پیدا کردن PIDهای firefox و کشتن آنها.
توضیح: حذف فایلهای لاگ قدیمیتر از ۷ روز.
توضیح: دانلود همه فایلهای موجود در urls.txt با curl.
rm، از -p یا -t استفاده کنید تا مطمئن شوید.-0 با find -print0 استفاده کنید.-P مراقب باشید که سیستم شما توانایی اجرای همزمان را داشته باشد.| ویژگی | xargs |
find -exec |
|---|---|---|
| سرعت | سریعتر (اجرای یکباره) | کندتر (اجرای جداگانه برای هر فایل) |
| نامهای با فاصله | با -0 کار میکند |
بهخوبی کار میکند |
| استفاده | با هر دستوری | فقط با find |
| مثال | find . -name "*.txt" | xargs rm |
find . -name "*.txt" -exec rm {} \; |
xargsfind -exec یا xargs -0find کار میکنید → -exec راحتتر استls *.txt | xargs wc تعداد خطوط فایلهای .txt را بشمارید.echo "file1 file2 file3" | xargs touch سه فایل بسازید.ls | xargs -I {} echo "File: {}" یک پیام برای هر فایل چاپ کنید.find . -name "*.tmp" | xargs -p rm فایلهای .tmp را با تأیید حذف کنید.ls -la | grep "^-" | awk '{print $9}' | xargs -n 1 file نوع فایلها را ببینید.